// 语法回顾:
// model:value="{{mobile}}"  双向绑定
// wx:for  wx:key="id"    列表渲染
// wx:if="{{true}}"  wx:else
// 小程序的生命周期: onLaunch 小程序启动时触发
// 页面的生命周期: onLoad  加载时触发
// 组件的生命周期: attached  组件进入页面节点树触发

// 常用组件
// 文字组件 <text>哈哈</text>
// 富文本组件 <rich-text nodes="{{content}}"></rich-text>
// 图片组件 <image src='地址'></image>
// 容器  <view> ...  </view>
// 链接  <navigator url='/页面地址'>嘻嘻</navigator>
//     细节: 小程序中页面跳转时有个/开头

// wx.redirectTo() 关闭当前页 跳转新页面
// wx.getStorage() 获取本地缓存数据
// wx.setStorage() 设置本地缓存数据
// wx.setClipboardData() 设置粘贴板(ctrl+c 复制)

// 文档: 微信开发者工具  帮助  开发者文档

// 业务回顾:
// 封装通用工具的时候: 1.导入导出语法    2.挂载全局wx对象
// wx.utils.toast   wx.http

// wechat-http 三方请求库    开源

// 请求首页公告列表数据 再渲染
// 携带id跳转进详情页面   请求详情数据 再渲染

// 登录全局检测: 小程序一启动时 立即获取本地存储的数据  存全局app上一份

// 封装全局组件authorization  通过全局app.token判断有无登录 控制页面是否显示 是否去登录页(如果去还要带着当前页面的路径-要回跳)

// 输入手机号 请求服务器获取验证码
// 输入验证码 请求服务器完成登录(获取到token存下来)

// ------------------------------------------------------------------------------------------------------------------
// 一旦token过期 如何处理
// 1. 直接去登录  =>  体验不好  时不时就要登录
// 2. 一旦过期  立即刷新token  token就有用了  =>  要利用refreshToken换一个新token

// 后端在登录时 不仅返回了token(身份 令牌)  还返回了 refreshToken(用于刷新token)
// 后端考虑到了token过期问题  提前给你一个可以用于刷新token 的refreshToken

// app.js  入口文件  小程序项目的起点   代码从这里开始
import './utils/utils' // 让内容代码执行 生效  这样wx上就多了一个utils
import './utils/http' // 让内容代码执行 生效  这样wx上就多了一个http
// 启动小程序的函数
App({
  token: null,
  globalData: {},
  // 小程序实例的生命周期函数(钩子函数)   从无到有 再到无的整个过程
  // 在生命周期的某些关键节点 会自动触发一些函数
  // onLaunch  小程序初始化时调用
  onLaunch() {
    // console.log('小程序初始化时调用')
    // 完成登录检测
    this.getToken()
  },
  getToken() {
    // 登录时会将token存在storage中 本地存储
    wx.getStorage({
      key: 'token',
      success: ({ data }) => {
        // console.log('token======>>>>>>>>', data)
        this.token = data
      },
    }) // 本地缓存中异步获取指定 key 的内容
  },

  setToken(token, refreshToken) {
    token = 'Bearer ' + token // 拼接
    refreshToken = 'Bearer ' + refreshToken // 拼接

    wx.setStorage({
      key: 'token',
      data: token,
    }) // 存本地
    wx.setStorage({
      key: 'refreshToken',
      data: refreshToken,
    }) // 存本地

    this.token = token // 存小程序实例
    this.refreshToken = refreshToken // 存小程序实例
  },
})

// 绝大多数的程序  为了照顾用户体验 不会上来让你登录

// 只有在关键时候  才登录  比如点击购买时

// 有些页面 是不需要登录的
// 有些页面 是必须要登录的    一旦点进这些页面  直接强行跳转登录

// 不登录就能访问的页面    首页index   公告详情notify   登录login
// 除此之外  其他页面都需要登录才能访问  这就多了

// 将来登录时  后端会返回一个用户身份标识  token  令牌
// token需要在获取到以后存下来  将来请求服务器时每次都需要携带
// token怎么存储  存storage本地存储中
// appdata中的数据 页面渲染的数据  不会永久存储  刷新后数据就没了   this.setData
// storage中的数据  会永久存储  刷新后数据还在    wx.setStorage

// 结论: 一旦用户点击登录  请求服务器   得到token令牌   存在storage中
// 登录检测: 小程序一启动  就去检查storage中的token   有 就登录了  没有 就没登录
